home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume8 / make.gy / part03 < prev    next >
Encoding:
Text File  |  1989-11-02  |  17.7 KB  |  704 lines

  1. Newsgroups: comp.sources.misc
  2. subject: v08i106: Make Version 1.5 (Part 3 of 3)
  3. From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  4. Reply-To: greggy@etude.UUCP (Greg Yachuk)
  5.  
  6. Posting-number: Volume 8, Issue 106
  7. Submitted-by: greggy@etude.UUCP (Greg Yachuk)
  8. Archive-name: make.gy/part03
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 3 (of 3)."
  17. # Contents:  decl.h default.dos default.mk make.h makefile makefile.dos
  18. #   tstring.h
  19. # Wrapped by greggy@etude on Mon Oct 30 19:10:09 1989
  20. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  21. if test -f 'decl.h' -a "${1}" != "-c" ; then 
  22.   echo shar: Will not clobber existing file \"'decl.h'\"
  23. else
  24. echo shar: Extracting \"'decl.h'\" \(2732 characters\)
  25. sed "s/^X//" >'decl.h' <<'END_OF_FILE'
  26. X/*
  27. X * decl.h
  28. X *
  29. X * 88-10-01 v1.0    created by greg yachuk, placed in the public domain
  30. X * 88-10-06 v1.1    changed prerequisite list handling
  31. X * 88-11-11 v1.2    fixed some bugs and added environment variables
  32. X * 89-07-12 v1.3    stop appending shell commands, and flush output
  33. X * 89-08-01 v1.4 AB    lots of new options and code
  34. X * 89-10-30 v1.5 greggy    -f -S -q options, took some changes from v1.4
  35. X *
  36. X */
  37. X
  38. X#ifdef    __STDC__
  39. Xextern int main(int argc, char **argv);
  40. Xextern int make_args(int argc, char **argv);
  41. Xextern char **grow_list(char **list, int *len);
  42. Xextern FILE *fopenp(char *fname, char *type);
  43. Xextern int make(char *targname, int worry);
  44. Xextern int default_rule(char *targname, struct targnode * targetp, int worry, int mustbuild);
  45. Xextern char *get_preqname(struct targnode * targp, char *suffix, char *basename);
  46. Xextern int add_metas(char *basename, char *preqname, char *targname);
  47. Xextern int split_meta(char *sym, char *name);
  48. Xextern int touch_file(char *targname);
  49. Xextern int display_prereq(char *targname, long targtime, char *preqname, long preqtime);
  50. Xextern long file_time(char *fname, int built);
  51. Xextern int usage(void);
  52. Xextern int build(struct shellnode * *shellp);
  53. Xextern int new_make(char **argv);
  54. Xextern int parse(FILE * fd);
  55. Xextern int link_targs(struct targnode * *targs, struct filenode * *preqs, struct shellnode * *shells);
  56. Xextern int add_macro(char *input, int scmd);
  57. Xextern int add_symbol(char *name, char *value, int scmd);
  58. Xextern struct symnode *get_symbol(char *name, int scmd);
  59. Xextern struct symnode *dup_symbol(struct symnode * sp, char *svalue);
  60. Xextern struct targnode *add_target(char *name);
  61. Xextern struct targnode *hash_target(char *name, unsigned short *maskp);
  62. Xextern struct filenode *add_file(char *name);
  63. Xextern struct filenode *hash_file(char *name, unsigned short *maskp);
  64. Xextern char **append_node(char **node, char **adds, int size);
  65. Xextern struct shellnode *add_shell(char *input);
  66. Xextern char *breakout(char *input);
  67. X#else
  68. Xextern int main();
  69. Xextern int make_args();
  70. Xextern char **grow_list();
  71. Xextern FILE *fopenp();
  72. Xextern int make();
  73. Xextern int default_rule();
  74. Xextern char *get_preqname();
  75. Xextern int add_metas();
  76. Xextern int split_meta();
  77. Xextern int touch_file();
  78. Xextern int display_prereq();
  79. Xextern long file_time();
  80. Xextern int usage();
  81. Xextern int build();
  82. Xextern int new_make();
  83. Xextern int parse();
  84. Xextern int link_targs();
  85. Xextern int add_macro();
  86. Xextern int add_symbol();
  87. Xextern struct symnode *get_symbol();
  88. Xextern struct symnode *dup_symbol();
  89. Xextern struct targnode *add_target();
  90. Xextern struct targnode *hash_target();
  91. Xextern struct filenode *add_file();
  92. Xextern struct filenode *hash_file();
  93. Xextern char **append_node();
  94. Xextern struct shellnode *add_shell();
  95. Xextern char *breakout();
  96. X#endif
  97. END_OF_FILE
  98. if test 2732 -ne `wc -c <'decl.h'`; then
  99.     echo shar: \"'decl.h'\" unpacked with wrong size!
  100. fi
  101. # end of 'decl.h'
  102. fi
  103. if test -f 'default.dos' -a "${1}" != "-c" ; then 
  104.   echo shar: Will not clobber existing file \"'default.dos'\"
  105. else
  106. echo shar: Extracting \"'default.dos'\" \(2572 characters\)
  107. sed "s/^X//" >'default.dos' <<'END_OF_FILE'
  108. X### this is the default makefile for DOS: default.mk
  109. X
  110. XSUFFIXES = .c .asm .l .y .ec
  111. X.SUFFIXES : $(SUFFIXES)
  112. X
  113. X#    ASM section
  114. XAS     = masm
  115. XASFLAGS     = /mx
  116. XCOMPILE.s= $(AS) $(ASFLAGS)
  117. X.asm.exe :
  118. X     $(COMPILE.s) $<;
  119. X     $(LINK.c) -o $@ $*.obj $(LDFLAGS)
  120. X     $(RM) $*.obj
  121. X.asm.obj :
  122. X     $(COMPILE.s) $<;
  123. X.asm.o     :
  124. X     $(COMPILE.s) $<;
  125. X     mv $*.obj $*.o
  126. X
  127. X#    C section
  128. XCC     = cl -A$(MODEL)
  129. XCFLAGS     = /Ox /G2
  130. XCOMPILE.c= $(CC) $(CFLAGS) -c
  131. X.c.exe     :
  132. X     $(LINK.c) -o $@ $< $(LDFLAGS)
  133. X     $(RM) $*.obj
  134. X.c.o     :
  135. X     $(COMPILE.c) /Fo$*.o $<
  136. X.c.obj     :
  137. X     $(COMPILE.c) $<
  138. X
  139. X#    D section (ANSI C declaration headers)
  140. X.c.d     :
  141. X     echo #ifndef NOPROTOTYPES > $*.tmp
  142. X     $(CC) -DNOPROTOTYPES -Zg $< >> $*.tmp
  143. X     echo #endif >> $*.tmp
  144. X    +updexhdr $*.tmp $*.d
  145. X     $(RM) $*.tmp
  146. X
  147. X#    I section (preprocessed C files)
  148. X.c.i    :
  149. X    $(COMPILE.c) -P $<
  150. X
  151. X#    ESQL/C section
  152. XESQL     = esql
  153. XEFLAGS     =
  154. XCOMPILE.e= $(ESQL) $(EFLAGS)
  155. X.ec.exe     :
  156. X     $(COMPILE.e) -e $<
  157. X     $(LINK.c) -o $@ $*.c $(LDFLAGS)
  158. X     $(RM) $*.obj $*.c
  159. X.ec.o     :
  160. X     $(COMPILE.e) -e $<
  161. X     $(COMPILE.c) /Fo$*.o $*.c
  162. X     $(RM) $*.c
  163. X.ec.obj     :
  164. X     $(COMPILE.e) -e $<
  165. X     $(COMPILE.c) $*.c
  166. X     $(RM) $*.c
  167. X.ec.c     :
  168. X     $(COMPILE.e) -e $<
  169. X
  170. X#    Lex section
  171. XLEX     = flex
  172. XLFLAGS     = -I
  173. XLEX.l     = $(LEX) $(LFLAGS) -t
  174. X.l.exe     :
  175. X     $(LEX.l) $< > $*.c
  176. X     $(LINK.c) -o $@ $*.c $(LDFLAGS)
  177. X     $(RM) $*.obj $*.c
  178. X.l.c     :
  179. X     $(LEX.l) $< > $@
  180. X.l.o     :
  181. X     $(LEX.l) $< > $*.c
  182. X     $(COMPILE.c) /Fo$*.o $*.c
  183. X     $(RM) $*.c
  184. X.l.obj     :
  185. X     $(LEX.l) $< > $*.c
  186. X     $(COMPILE.c) $*.c
  187. X     $(RM) $*.c
  188. X
  189. X#    YACC Section
  190. XYACC     = bison
  191. XYFLAGS     =
  192. XYACC.y     = $(YACC) $(YFLAGS)
  193. X.y.exe:
  194. X     $(YACC.y) $<
  195. X     $(LINK.c) -o $@ $*.c $(LDFLAGS)
  196. X     $(RM) $*.obj $*.c
  197. X.y.h:
  198. X     $(YACC.y) -d -y $<
  199. X     $(RM) ytab.c
  200. X     $(MV) ytab.h $@
  201. X.y.c:
  202. X     $(YACC.y) $<
  203. X.y.o:
  204. X     $(YACC.y) $<
  205. X     $(COMPILE.c) /Fo$*.o $*.c
  206. X     $(RM) $*.c
  207. X.y.obj:
  208. X     $(YACC.y) $<
  209. X     $(COMPILE.c) $*.c
  210. X     $(RM) $*.c
  211. X
  212. X#    BSD Unix Misc section
  213. X#A        = .a
  214. X#AR       = ar
  215. X#ARFLAGS  =
  216. X#BIN      = /bin
  217. X#CDEBUG   = -g
  218. X#CP       = cp
  219. X#E        =
  220. X#EDITOR   = /usr/bin/vi
  221. X#GFLAGS   =
  222. X#GET      = get
  223. X#LDFLAGS  =
  224. X#LD       = ld
  225. X#LIBDIR   =
  226. X#MAKE     = make
  227. X#MKDEPEND = makedepend
  228. X#MODEL    =
  229. X#MV       = mv
  230. X#O        = .o
  231. X#RANLIB   = ranlib
  232. X#RM       = rm -f
  233. X#SHELL    = /bin/csh
  234. X
  235. X#    DOS Misc section
  236. XA        = .lib
  237. XAR       = lib
  238. XARFLAGS  =
  239. XBIN      = C:\bin
  240. XCDEBUG   = /Od /Zi
  241. XCP       = cp
  242. XE        = .exe
  243. XEDITOR   = $(BIN)\vi
  244. XGFLAGS   =
  245. XGET      = echo cannot get
  246. XLDFLAGS  = /link /noe /noi $(LIBS)
  247. XLD       = $(CC) $(CFLAGS)
  248. XLIBDIR   = c:\msc5.1\lib
  249. XLINK.c   = $(CC) $(CFLAGS)
  250. XMAKE     = make
  251. XMKDEPEND = mkdepend
  252. XMODEL    = S
  253. XMV       = mv
  254. XO        = .o
  255. XRANLIB   = echo cannot ranlib 
  256. XRM       = rm -f
  257. XSHELL    = command /c
  258. END_OF_FILE
  259. if test 2572 -ne `wc -c <'default.dos'`; then
  260.     echo shar: \"'default.dos'\" unpacked with wrong size!
  261. fi
  262. # end of 'default.dos'
  263. fi
  264. if test -f 'default.mk' -a "${1}" != "-c" ; then 
  265.   echo shar: Will not clobber existing file \"'default.mk'\"
  266. else
  267. echo shar: Extracting \"'default.mk'\" \(1578 characters\)
  268. sed "s/^X//" >'default.mk' <<'END_OF_FILE'
  269. X### this is the default makefile for Unix: default.mk
  270. X
  271. XSUFFIXES = .o .c .f .e .r .y .l .s .sh .h
  272. X.SUFFIXES: $(SUFFIXES)
  273. X
  274. X#    ASM section
  275. XAS       = as
  276. XASFLAGS  =
  277. X.s:
  278. X    $(AS) $(ASFLAGS) $<
  279. X.s.o:
  280. X    $(AS) $(ASFLAGS) -o $@ $<
  281. X
  282. X#    C section
  283. XCC       = cc
  284. XCFLAGS   = -O
  285. X.c.o:
  286. X    $(CC) $(CFLAGS) -c $<
  287. X
  288. X.c.i:
  289. X    $(CC) $(CFLAGS) -P $<
  290. X
  291. X.c:
  292. X    $(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
  293. X
  294. X#    Lex section
  295. XLEX      = lex
  296. XLFLAGS   =
  297. X.l.c:
  298. X    $(LEX) $(LFLAGS) $<
  299. X    $(MV) lex.yy.c $@
  300. X
  301. X.l.o:
  302. X    $(LEX) $(LFLAGS) $<
  303. X    $(CC) $(CFLAGS) -c lex.yy.c
  304. X    $(RM) lex.yy.c
  305. X    $(MV) lex.yy.o $@
  306. X
  307. X#    YACC section
  308. XYACC     = yacc
  309. XYFLAGS   =
  310. X.y.c:
  311. X    $(YACC) $(YFLAGS) $<
  312. X    $(MV) y.tab.c $@
  313. X
  314. X.y.h:
  315. X    $(YACC) $(YFLAGS) -d $<
  316. X    $(RM) y.tab.c
  317. X    $(MV) y.tab.h $@
  318. X
  319. X.y.o:
  320. X    $(YACC) $(YFLAGS) $<
  321. X    $(CC) $(CFLAGS) -c y.tab.c
  322. X    $(RM) y.tab.c
  323. X    $(MV) y.tab.o $@
  324. X
  325. X.sh:
  326. X    cp $< $@
  327. X
  328. X#    BSD Unix Misc section
  329. XA        = .a
  330. XAR       = ar
  331. XARFLAGS  =
  332. XBIN      = /bin
  333. XCDEBUG   = -g
  334. XCP       = cp
  335. XE        =
  336. XEDITOR   = /usr/bin/vi
  337. XGFLAGS   =
  338. XGET      = get
  339. XLDFLAGS  =
  340. XLD       = ld
  341. XLIBDIR   =
  342. XMAKE     = make
  343. XMKDEPEND = makedepend
  344. XMODEL    =
  345. XMV       = mv
  346. XO        = .o
  347. XRANLIB   = ranlib
  348. XRM       = rm -f
  349. XSHELL    = /bin/csh
  350. X
  351. X#    DOS Misc section
  352. X#A        = .lib
  353. X#AR       = lib
  354. X#ARFLAGS  =
  355. X#BIN      = C:\bin
  356. X#CDEBUG   = /Od /Zi
  357. X#CP       = cp
  358. X#E        = .exe
  359. X#EDITOR   = $(BIN)\vi
  360. X#GFLAGS   =
  361. X#GET      = echo cannot get
  362. X#LDFLAGS  = /link /noe /noi $(LIBS)
  363. X#LD       = $(CC) $(CFLAGS)
  364. X#LIBDIR   = c:\msc5.1\lib
  365. X#MAKE     = make
  366. X#MKDEPEND = mkdepend
  367. X#MODEL    = S
  368. X#MV       = mv
  369. X#O        = .o
  370. X#RANLIB   = echo cannot ranlib 
  371. X#RM       = rm -f
  372. X#SHELL    = command /c
  373. END_OF_FILE
  374. if test 1578 -ne `wc -c <'default.mk'`; then
  375.     echo shar: \"'default.mk'\" unpacked with wrong size!
  376. fi
  377. # end of 'default.mk'
  378. fi
  379. if test -f 'make.h' -a "${1}" != "-c" ; then 
  380.   echo shar: Will not clobber existing file \"'make.h'\"
  381. else
  382. echo shar: Extracting \"'make.h'\" \(3322 characters\)
  383. sed "s/^X//" >'make.h' <<'END_OF_FILE'
  384. X/*
  385. X * make.h
  386. X *
  387. X * 88-10-01 v1.0    created by greg yachuk, placed in the public domain
  388. X * 88-10-06 v1.1    changed prerequisite list handling
  389. X * 88-11-11 v1.2    fixed some bugs and added environment variables
  390. X * 89-07-12 v1.3    stop appending shell commands, and flush output
  391. X * 89-08-01 v1.4 AB    lots of new options and code
  392. X * 89-10-30 v1.5 greggy    -f -S -q options, took some changes from v1.4
  393. X *
  394. X */
  395. X
  396. X#define MAKEINI "default.mk"
  397. X
  398. X#ifdef    MSDOS
  399. X#define    PATH_SEPARATOR    ";"
  400. X#define    FILE_SEPARATOR    ":/\\"
  401. X#define    SHELL_METAS    "<|>"
  402. X#else
  403. X#define    PATH_SEPARATOR    ":"
  404. X#define    FILE_SEPARATOR    "/"
  405. X#define    SHELL_METAS    "<|>`*?"
  406. X#endif
  407. X
  408. X#define    MAXNEGTIME    0x80000000
  409. X
  410. X#define    equal(s,t)        (!strcmp((s),(t)))
  411. X#define    get_target(t)        hash_target((t), NULL)
  412. X#define    get_file(f)        hash_file((f), NULL)
  413. X#define    append_preq(t,p)    (fileptr*)append_node((char**)(t),(char**)(p),sizeof(fileptr*))
  414. X#define    append_shell(t,s)    (shellptr*)append_node((char**)(t),(char**)(s),sizeof(shellptr*))
  415. X
  416. Xtypedef unsigned short t_mask;
  417. X
  418. Xtypedef struct targnode
  419. X{
  420. X    t_mask  tmask;        /* mask to avoid string compares */
  421. X    struct targnode *tnext;    /* next target in global target list */
  422. X    struct filenode *tfile;    /* file node for this target */
  423. X    struct filenode **tpreq;/* pre-req list for this target */
  424. X    struct shellnode **tshell;    /* command list for this target */
  425. X}       targnode, *targptr;
  426. X
  427. Xtypedef struct filenode
  428. X{
  429. X    t_mask  fmask;        /* mask to avoid string compares */
  430. X    char   *fname;        /* name of this file (targ, preq...) */
  431. X    long    ftime;        /* last MODIFY time for this file */
  432. X    struct filenode *fnext;    /* next file node in global file list */
  433. X}       filenode, *fileptr;
  434. X
  435. Xtypedef struct shellnode
  436. X{
  437. X    char   *scmd;        /* text of command */
  438. X    unsigned s_silent:1;    /* don't echo before executing */
  439. X    unsigned s_ignore:1;    /* ignore exit status */
  440. X    unsigned s_shell:1;    /* force spawning of command.com */
  441. X    struct shellnode *slink;/* next shell node in global list */
  442. X}       shellnode, *shellptr;
  443. X
  444. Xtypedef struct symnode
  445. X{
  446. X    t_mask  smask;        /* mask to avoid string compares */
  447. X    char   *sname;        /* name of a symbol */
  448. X    char   *svalue;        /* value of a symbol */
  449. X    struct symnode *snext;    /* next symbol node in global list */
  450. X    int     scmd;        /* command line macro? */
  451. X    int     slevel;        /* level of new_make() */
  452. X}       symnode, *symptr;
  453. X
  454. Xtypedef struct optnode
  455. X{
  456. X    unsigned depend;    /* -d */
  457. X    unsigned display:1;    /* -D */
  458. X    unsigned envirn:1;    /* -e */
  459. X    unsigned ignore:1;    /* -i */
  460. X    unsigned keepon:1;    /* -k */
  461. X    unsigned noexec:1;    /* -n */
  462. X    unsigned query:1;    /* -q */
  463. X    unsigned silent:1;    /* -s */
  464. X    unsigned touch:1;    /* -t */
  465. X    char   *make;        /* current value of $(MAKE) */
  466. X}       optnode;
  467. X
  468. Xextern targptr target_list;    /* global list of targets */
  469. Xextern fileptr file_list;    /* global list of file nodes */
  470. Xextern symptr symbol_list;    /* global list of symbol nodes */
  471. Xextern shellptr shell_list;    /* global list of shell nodes */
  472. X
  473. Xextern int make_level;        /* level of new_make() */
  474. X
  475. Xextern targptr first_targ;    /* first target (if nothing named) */
  476. Xextern targptr suffix_targ;    /* target node of ".SUFFIXES" */
  477. X
  478. Xextern optnode opts;        /* various options */
  479. Xextern char **tlist;        /* list of command line targets */
  480. Xextern long now;        /* current time */
  481. X
  482. X#define    REGISTER    register
  483. X
  484. X#ifndef    MSDOS
  485. Xchar   *getenv();
  486. X
  487. X#define    P_WAIT        1
  488. X#define    P_NOWAIT    2
  489. X#define    P_OVERLAY    3
  490. X#endif                /* MSDOS */
  491. END_OF_FILE
  492. if test 3322 -ne `wc -c <'make.h'`; then
  493.     echo shar: \"'make.h'\" unpacked with wrong size!
  494. fi
  495. # end of 'make.h'
  496. fi
  497. if test -f 'makefile' -a "${1}" != "-c" ; then 
  498.   echo shar: Will not clobber existing file \"'makefile'\"
  499. else
  500. echo shar: Extracting \"'makefile'\" \(1127 characters\)
  501. sed "s/^X//" >'makefile' <<'END_OF_FILE'
  502. X# name of this program
  503. XNAME    = make
  504. X
  505. X# define the FLAGS as required for MSDOS or Unix
  506. XCFLAGS    = -O
  507. XLDFLAGS    =
  508. X
  509. XSRCS    = make.c build.c parse.c tstring.c
  510. XOBJS    = make.o build.o parse.o tstring.o
  511. XPROG    = $(NAME)$(EXE)
  512. X
  513. X# define your installation directory
  514. XBIN    = $(HOME)/bin
  515. X
  516. X# archive utility
  517. XARCADD    = arc a
  518. X
  519. X# files to archive
  520. XARCS    = decl.h make.h tstring.h make.c build.c parse.c tstring.c \
  521. X      default.mk default.bsd makefile makefile.bsd make.doc \
  522. X      README $(PROG)
  523. X
  524. Xall:    $(PROG)
  525. X
  526. X$(PROG):    $(OBJS)
  527. X    $(CC) $(CFLAGS) $(OBJS) -o $(PROG) $(LDFLAGS)
  528. X
  529. Xarc:    $(NAME).arc
  530. X
  531. X$(NAME).arc:    $(ARCS)
  532. X    $(RM) $(NAME).arc
  533. X    $(ARCADD) $(NAME).arc $(ARCS)
  534. X
  535. Xinstall:    $(BIN)/$(PROG) $(BIN)/default.mk
  536. X$(BIN)/$(PROG):    $(PROG)
  537. X    cp $(PROG) $(BIN)/$(PROG)
  538. X$(BIN)/default.mk: default.mk
  539. X    cp default.mk $(BIN)/default.mk
  540. X
  541. Xclean:
  542. X    $(RM) *.o
  543. X    $(RM) *.bak
  544. X
  545. X# use this to check the size of the program (use chkdsk if necessary)
  546. Xsize:
  547. X    pmap
  548. X
  549. Xdepend:
  550. X    $(MKDEPEND) $(SRCS) > makefile.tmp
  551. X    $(MV) makefile.tmp makefile
  552. X
  553. X# DO NOT DELETE THIS LINE
  554. X
  555. Xmake.o: make.h tstring.h decl.h 
  556. Xbuild.o: make.h tstring.h decl.h
  557. Xparse.o: make.h tstring.h decl.h 
  558. Xtstring.o: tstring.h 
  559. END_OF_FILE
  560. if test 1127 -ne `wc -c <'makefile'`; then
  561.     echo shar: \"'makefile'\" unpacked with wrong size!
  562. fi
  563. # end of 'makefile'
  564. fi
  565. if test -f 'makefile.dos' -a "${1}" != "-c" ; then 
  566.   echo shar: Will not clobber existing file \"'makefile.dos'\"
  567. else
  568. echo shar: Extracting \"'makefile.dos'\" \(1245 characters\)
  569. sed "s/^X//" >'makefile.dos' <<'END_OF_FILE'
  570. X# name of this program
  571. XNAME    = make
  572. X
  573. X# define the FLAGS as required for MSDOS or Unix
  574. XCFLAGS    = /Oals /Gs /G2
  575. X#CFLAGS  = /Od /Zi
  576. XLDFLAGS = /link /cparmaxalloc:1 /noe /stack:2000
  577. X
  578. XSRCS    = make.c build.c parse.c tstring.c
  579. XOBJS    = make.o build.o parse.o tstring.o
  580. XPROG    = $(NAME)$(EXE)
  581. X
  582. X# define your installation directory
  583. XBIN    = c:/bin
  584. X
  585. X# archive utility
  586. XARCADD    = pkarc a
  587. X
  588. X# files to archive
  589. XARC1    = decl.h make.h tstring.h make.c build.c parse.c tstring.c default.mk
  590. XARC2    = default.bsd makefile makefile.bsd make.doc README $(PROG)
  591. XARCS    = $(ARC1) $(ARC2)
  592. X
  593. Xall:    $(PROG)
  594. X
  595. X$(PROG):    $(OBJS)
  596. X    $(CC) $(CFLAGS) $(OBJS) -o $(PROG) $(LDFLAGS)
  597. X
  598. Xarc:    $(NAME).arc
  599. X
  600. X$(NAME).arc:    $(ARCS)
  601. X    $(RM) $(NAME).arc
  602. X    $(ARCADD) $(NAME).arc $(ARC1)
  603. X    $(ARCADD) $(NAME).arc $(ARC2)
  604. X
  605. Xinstall:    $(BIN)/$(PROG) $(BIN)/default.mk
  606. X$(BIN)/$(PROG):    $(PROG)
  607. X    cp $(PROG) $(BIN)/$(PROG)
  608. X$(BIN)/default.mk: default.mk
  609. X    cp default.mk $(BIN)/default.mk
  610. X
  611. Xclean:
  612. X    $(RM) *.o
  613. X    $(RM) *.bak
  614. X
  615. X# use this to check the size of the program (use chkdsk if necessary)
  616. Xsize:
  617. X    pmap
  618. X
  619. Xdepend:
  620. X    $(MKDEPEND) $(SRCS) > makefile.tmp
  621. X    $(MV) makefile.tmp makefile
  622. X
  623. X# DO NOT DELETE THIS LINE
  624. X
  625. Xmake.o: make.h tstring.h decl.h 
  626. Xbuild.o: make.h tstring.h decl.h 
  627. Xparse.o: make.h tstring.h decl.h 
  628. Xtstring.o: tstring.h 
  629. END_OF_FILE
  630. if test 1245 -ne `wc -c <'makefile.dos'`; then
  631.     echo shar: \"'makefile.dos'\" unpacked with wrong size!
  632. fi
  633. # end of 'makefile.dos'
  634. fi
  635. if test -f 'tstring.h' -a "${1}" != "-c" ; then 
  636.   echo shar: Will not clobber existing file \"'tstring.h'\"
  637. else
  638. echo shar: Extracting \"'tstring.h'\" \(1257 characters\)
  639. sed "s/^X//" >'tstring.h' <<'END_OF_FILE'
  640. X/*
  641. X * tstring.h
  642. X *
  643. X * 88-10-01 v1.0    created by greg yachuk, placed in the public domain
  644. X * 88-10-06 v1.1    changed prerequisite list handling
  645. X * 88-11-11 v1.2    fixed some bugs and added environment variables
  646. X * 89-07-12 v1.3    stop appending shell commands, and flush output
  647. X * 89-08-01 v1.4 AB    lots of new options and code
  648. X * 89-10-30 v1.5 greggy    -f -S -q options, took some changes from v1.4
  649. X *
  650. X */
  651. X#define    tnew(t)        ((t *) talloc(sizeof(t)))
  652. X#define    tfree(t)    (free((char *) t))
  653. X
  654. X#define    tstrcat(s,p)    (strcat(strcpy(talloc(strlen(s)+strlen(p)+1),(s)),(p)))
  655. X#define    tstrcpy(s)    (strcpy(talloc(strlen(s)+1), (s)))
  656. X
  657. X#ifdef    __STDC__
  658. Xextern char *talloc(int n);
  659. Xextern char *trealloc(char *s, int n);
  660. Xextern char *tstrncpy(char *s, int n);
  661. Xextern int terror(int n, char *s);
  662. Xextern char *tstrspan(char *str);
  663. Xextern char *tunquote(char *str);
  664. Xextern char *tsplit(char *s, char *seps, char **dp);
  665. Xextern char *token(char *s, char *sep, char *schar);
  666. Xextern char **tokenize(char *input);
  667. Xextern char *tgets(FILE * fd);
  668. X#else
  669. Xextern char *talloc();
  670. Xextern char *trealloc();
  671. Xextern char *tstrncpy();
  672. Xextern int terror();
  673. Xextern char *tstrspan();
  674. Xextern char *tunquote();
  675. Xextern char *tsplit();
  676. Xextern char *token();
  677. Xextern char **tokenize();
  678. Xextern char *tgets();
  679. X#endif
  680. END_OF_FILE
  681. if test 1257 -ne `wc -c <'tstring.h'`; then
  682.     echo shar: \"'tstring.h'\" unpacked with wrong size!
  683. fi
  684. # end of 'tstring.h'
  685. fi
  686. echo shar: End of archive 3 \(of 3\).
  687. cp /dev/null ark3isdone
  688. MISSING=""
  689. for I in 1 2 3 ; do
  690.     if test ! -f ark${I}isdone ; then
  691.     MISSING="${MISSING} ${I}"
  692.     fi
  693. done
  694. if test "${MISSING}" = "" ; then
  695.     echo You have unpacked all 3 archives.
  696.     rm -f ark[1-9]isdone
  697. else
  698.     echo You still need to unpack the following archives:
  699.     echo "        " ${MISSING}
  700. fi
  701. ##  End of shell archive.
  702. exit 0
  703.  
  704.